package br.com.fatene.poo2.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.fatene.poo2.model.Cliente;

public class ClienteDao {

    private Cliente cliente;
	
	public int salvar(Cliente cliente) throws SQLException {
		
		Connection conn = Conexao.obterConexao();

		String sql = "INSERT INTO cliente ("
				+ "nome,"
				+ "cpf,"
				+ "excluido,"
				+ "data_nacimento,"
				+ "sexo,tipo_logradouro,"
				+ "logradouro,"
				+ "numero_logradouro,"
				+ "cep_logradouro"
				+ ") "
				+ "VALUES (?,?,?,?,?,?,?,?,?)";

		PreparedStatement stat = conn.prepareStatement(sql,	PreparedStatement.RETURN_GENERATED_KEYS);	
		
		stat.setString(1,cliente.getNome());
		stat.setString(2,cliente.getCpf());
		stat.setBoolean(3,cliente.isExcluido());
		stat.setString(4,cliente.getDataNacimento());
		stat.setString(5,cliente.getSexo());
		stat.setString(6,cliente.getTipoLogradouro());
		stat.setString(7,cliente.getLogradouro());
		stat.setString(8,cliente.getNumeroLogradouro());
		stat.setString(9,cliente.getCepLogradouro());
		
		stat.execute();
		
		ResultSet rs = stat.getGeneratedKeys();
		int id = 0;  
	    if(rs.next()){  
	        id = rs.getInt(1);  
	    }         
	    System.out.println("Id gerado pelo insert foi " + id);  
	
	  
		stat.close();
		conn.close();  
		
		return id;
		
		
	}

	public Cliente findClienteByCpfOrName(String cpf, String nome) throws Exception {
		
		Connection conn = Conexao.obterConexao();
		String sql = "SELECT "
				+ " c.id,"
				+ " c.nome,"
				+ " c.cpf,"
				+ " c.excluido,"
				+ " c.data_nacimento,"
				+ " c.sexo,"
				+ " tipo_logradouro,"
				+ " c.logradouro,"
				+ " c.numero_logradouro,"
				+ " c.cep_logradouro,"
				+ " con.agencia,"
				+ " con.numero,"
				+ " con.saldo"
				+" FROM cliente AS c"
				+" LEFT JOIN conta AS con ON c.id = con.cliente_id"
				+ " WHERE 1=1"; 
				if(!cpf.isEmpty() ){
					sql+= " AND c.cpf='"+ cpf +"' ";
				}if(!nome.isEmpty()){
					sql+= " AND c.nome = '"+nome+"' ";
					
				}
		PreparedStatement stat = conn.prepareStatement(sql);	
		
		ResultSet rs = stat.executeQuery();
		cliente = new Cliente();
		while (rs.next()) { 
			cliente.setId(rs.getInt("id"));
			cliente.setNome( rs.getString("nome"));
			cliente.setCpf(rs.getString("cpf"));
			cliente.setDataNacimento(rs.getString("data_nacimento"));
			cliente.setSexo(rs.getString("sexo"));
			cliente.setTipoLogradouro(rs.getString("tipo_logradouro"));
			cliente.setLogradouro(rs.getString("logradouro"));
			cliente.setNumeroLogradouro(rs.getString("numero_logradouro"));
			cliente.setCepLogradouro(rs.getString( "cep_logradouro"));
			cliente.getConta().setAgencia(rs.getInt(("agencia")));
			cliente.getConta().setNumero((rs.getInt( "numero")));
			cliente.getConta().setSaldo((rs.getDouble( "saldo")));
			}
		
		stat.close();
		conn.close();

		if(cliente.getId()<=0){
			throw new Exception();
		}
		
		return cliente;
		
	}

	public void update(Cliente cliente2) throws SQLException {
		Connection conn = Conexao.obterConexao();

		
		String sql = "UPDATE cliente SET "
				+ " nome = '"+cliente2.getNome()+"',"
				+ " cpf = '"+cliente2.getCpf()+"',"
				+ " data_nacimento = '"+cliente2.getDataNacimento()+"',"
				+ " sexo = '"+cliente2.getSexo()+"',"
				+ " tipo_logradouro = '"+cliente2.getTipoLogradouro()+"',"
				+ " logradouro = '"+cliente2.getLogradouro()+"',"
				+ " numero_logradouro = '"+cliente2.getNumeroLogradouro()+"',"
				+ " cep_logradouro = '"+cliente2.getLogradouro()+"'"
				+ " WHERE id = "+cliente2.getId();

		PreparedStatement stat = conn.prepareStatement(sql);	
		
		stat.executeUpdate();
		
	}

	public void delete(Cliente cliente2) throws SQLException {
		Connection conn = Conexao.obterConexao();
		String sql = "DELETE FROM cliente WHERE id = "+cliente2.getId();

		PreparedStatement stat = conn.prepareStatement(sql);	
		
		stat.execute();
		
	} 
	
	
}
